package shm.capaDatos.entidades;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.ManyToOne;

import shm.capaDatos.vo.DatosAuditoriaVO;
import shm.capaDatos.vo.UsuarioVO;

@Embeddable
public class DatosAuditoria implements Serializable{
	private Date fechaCreacion;
	@ManyToOne
	private Usuario usuarioCreacion;
	private Date fechaActualizacion;
	@ManyToOne
	private Usuario usuarioActualizacion;
	private Date fechaEliminacion;
	@ManyToOne
	private Usuario usuarioEliminacion;
	@Column(nullable = false, unique = false)
	private Boolean eliminado;
	private static final long serialVersionUID = 1L;
	
	
	public DatosAuditoria() {

	}

	public DatosAuditoria(Date fechaCreacion, Usuario usuarioCreacion,
			Date fechaActualizacion, Usuario usuarioActualizacion,
			Date fechaEliminacion, Usuario usuarioEliminacion, Boolean eliminado) {
		super();
		this.fechaCreacion = fechaCreacion;
		this.usuarioCreacion = usuarioCreacion;
		this.fechaActualizacion = fechaActualizacion;
		this.usuarioActualizacion = usuarioActualizacion;
		this.fechaEliminacion = fechaEliminacion;
		this.usuarioEliminacion = usuarioEliminacion;
		this.eliminado = eliminado;
	}

	public DatosAuditoriaVO getVO(){		
		DatosAuditoriaVO datosAuditoriaVO = new DatosAuditoriaVO(this.fechaCreacion,this.getUsuarioCreacionVO(), this.fechaActualizacion, this.getUsuarioActualizacionVO(),
				this.fechaEliminacion, this.getUsuarioEliminacionVO(), this.eliminado) ;
		return datosAuditoriaVO;
	}

	public void actualizacion(UsuarioVO usuarioActualizacion, Date fechaActualizacion){
		Usuario usuarioActualizacionEB = new Usuario();
		usuarioActualizacionEB.setVO(usuarioActualizacion);
		this.fechaActualizacion = fechaActualizacion;
		this.usuarioActualizacion = usuarioActualizacionEB;		
	}
	public void creacion(UsuarioVO usuarioCreacion, Date fechaCreacion){
		Usuario usuarioCreacionEB = new Usuario();
		usuarioCreacionEB.setVO(usuarioCreacion);
		this.fechaCreacion = fechaCreacion;
		this.usuarioCreacion = usuarioCreacionEB;
		this.eliminado = new Boolean(false);
	}
	public void eliminacion(UsuarioVO usuarioEliminacion, Date fechaEliminacion){
		Usuario usuarioEliminacionEB = new Usuario();
		usuarioEliminacionEB.setVO(usuarioEliminacion);
		this.fechaEliminacion = fechaEliminacion;
		this.usuarioEliminacion = usuarioEliminacionEB;
		this.eliminado = new Boolean(true);
	}
	
	public Date getFechaCreacion() {
		return fechaCreacion;
	}
	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}
	public Usuario getUsuarioCreacion() {
		return usuarioCreacion;
	}
	public void setUsuarioCreacion(Usuario usuarioCreacion) {
		this.usuarioCreacion = usuarioCreacion;
	}
	public Date getFechaActualizacion() {
		return fechaActualizacion;
	}
	public void setFechaActualizacion(Date fechaActualizacion) {
		this.fechaActualizacion = fechaActualizacion;
	}
	public Usuario getUsuarioActualizacion() {
		return usuarioActualizacion;
	}
	public void setUsuarioActualizacion(Usuario usuarioActualizacion) {
		this.usuarioActualizacion = usuarioActualizacion;
	}
	public Date getFechaEliminacion() {
		return fechaEliminacion;
	}
	public void setFechaEliminacion(Date fechaEliminacion) {
		this.fechaEliminacion = fechaEliminacion;
	}
	public Usuario getUsuarioEliminacion() {
		return usuarioEliminacion;
	}
	public void setUsuarioEliminacion(Usuario usuarioEliminacion) {
		this.usuarioEliminacion = usuarioEliminacion;
	}
	public Boolean getEliminado() {
		return eliminado;
	}
	public void setEliminado(Boolean eliminado) {
		this.eliminado = eliminado;
	}
	private UsuarioVO getUsuarioCreacionVO(){
		UsuarioVO usuarioCreacion = null;
		if(this.usuarioCreacion != null){
			usuarioCreacion = this.usuarioCreacion.getVOBasico();
		}
		return usuarioCreacion;
	}
	private UsuarioVO getUsuarioActualizacionVO(){
		UsuarioVO usuarioActualizacion = null;
		if(this.usuarioActualizacion != null){
			usuarioActualizacion = this.usuarioActualizacion.getVOBasico();
		}
		return usuarioActualizacion;
	}
	private UsuarioVO getUsuarioEliminacionVO(){
		UsuarioVO usuarioEliminacion = null;
		if(this.usuarioEliminacion != null){
			usuarioEliminacion = this.usuarioEliminacion.getVOBasico();
		}
		return usuarioEliminacion;
	}
	
}
